<?php

function get_info(){
  return 'info:chy create 2024-04-18 15:13:44';
}


register_nav_menus( array(
	'header_menu' => 'chy Header Menu',
	'footer_menu' => 'chy Footer Menu'
) );



// 给所有 栏目/子栏目 定义模版
function custom_category_template_chy($template) {

  // var_dump(get_queried_object());exit; //取当前栏目信息
  // print_r(get_the_category());exit; //【需后续确认】感觉是当前栏目信息，但有时时候不对???

  //通过分类别名或ID选择模板文件

    $cat = get_queried_object();
    var_dump($cat); exit;

    if($cat->parent<1){ //顶级栏目无父栏目，值为：0
      
      $new_template = locate_template(['categorys/'.$cat->slug.'.cover.php']); 

      if (!empty($new_template)) {
        return $new_template;
      }

    }
    else{ //非顶级栏目 
  
      // 先使用当前栏目（子栏目）名称对应的模版名称
      $new_template = locate_template(array('categorys/'.$cat->slug.'.list.php'));
      if (!empty($new_template)) {
        return $new_template;
      }

      // 没有则使用父级栏目作为模版名称
      $new_template = locate_template(array('categorys/'.strtolower(get_cat_name($cat->category_parent)).'.list.php')); 

      // var_dump($new_template, 'file: categorys/'.strtolower(get_cat_name($cat->category_parent)).'.list.php'); exit;

      if (!empty($new_template)) {
        return $new_template;
      }

    }

  // exit('Error: '.$cat->slug.'未设置模版！'); //未设置模版则使用默认模版

  return $template;

  // --  下面代码已无用，暂留 ------------------
  // if (is_category()) {

  //   $cat = get_query_var('cat');
  //   $category = get_category($cat);

  //   // 检查当前分类是否是你要设置特定模板的子分类
  //   if (in_array($category->cat_ID, array(26, 27, 28))) {
  //       $new_template = locate_template(array('sub-category/product-sub-common.php'));
  //       // exit('cate:'.$new_template); //测试用，可删除
  //       if (!empty($new_template)) {
  //           return $new_template;
  //       }
  //   }
  //   // 上面这块代码可以多次执行以调用不的模版

  // }

  // return $template;

}
// add_filter('category_template', 'custom_category_template_chy');




/* 
【列表模版list】
 分类法taxonomy（含文章的目录category）模版 
 注：分类法就是将post进行分类，和文章中划到某个栏目是一样的，category是wp设置的一个分类法

 2024-05-09 15:33:18
 */
function custom_taxonomy_template_chy($template) {

  //1. 返回当前文档对象
  $catObj = get_queried_object();

  //2. 从 分类法名称 取回 post类型名称,这个名称将做为cover/list/view的目录
  $dirName = explode('_', $catObj->taxonomy)[0];
  // var_dump($catObj, $dirName); exit;

  //3. 判断并合成list模版
  $new_template = locate_template(["{$dirName}/{$catObj->slug}.list.php"]);
  if (!empty($new_template)) return $new_template;

  $new_template = locate_template(["{$dirName}/list.php"]);
  if (!empty($new_template)) return $new_template;

  $new_template = locate_template(["taxonomy-{$dirName}-{$catObj->slug}.php"]);
  if (!empty($new_template)) return $new_template;

  $new_template = locate_template(["taxonomy-{$dirName}.php"]);
  if (!empty($new_template)) return $new_template;

  // var_dump("{$dirName}/{$catObj->slug}");exit;

  return $template;

}

add_filter('category_template', 'custom_taxonomy_template_chy');
add_filter('taxonomy_template', 'custom_taxonomy_template_chy');



/* 
 归档模版【封面模版cover】

 2024-05-09 15:33:18
 */
function custom_archive_template_chy($template) {

  //返回当前文档对象
  $catObj = get_queried_object();
  // var_dump(term_description(), $catObj); exit;

  // 先找cover
  $new_template = locate_template(["{$catObj->name}/cover.php"]);
  if (!empty($new_template)) return $new_template;

  $new_template = locate_template(["{$catObj->name}/list.php"]);
  if (!empty($new_template)) return $new_template;

  return $template;

}

add_filter('archive_template', 'custom_archive_template_chy');






/*
 view 模版规则
 post/自定义post 文章视图的模版规则（会覆盖所有single模版）
 chy 2024-05-09 10:50:47

 说明：
 对于url（/product/building/screen-2024.html）的模版加载顺序为规则为：
 加载模版时按下面先后顺序加载：
 1. theme_name/single/{分类法名称}-{子分类法名称}.php => theme_name/single/building-screen-2024.php
 2. theme_name/single/{分类法名称}.php => theme_name/single/building.php
 3. theme_name/single-{分类法名称}-{子分类法名称}.php => theme_name/single-building-screen-2024.php
 4. theme_name/single-{分类法名称}.php => theme_name/single-building.php
 5. single-{分类法}.php -> single.php -> index.php （同wp默认规则）

*/

// const  SINGLE_PATH = 'single';
function custom_single_template_chy($template) {

  //1. 取得当前`post type`
  $current_post_type = get_post_type(); 

  //2.取得当前`post`对应的顶级分类法(!!!所有类型必需设置分类法!!!)
  $topParentPostType = current(get_object_taxonomies($current_post_type));//取得当前post对应的分类法（可能有多个，所以是一个数组）,使用第一个单元即为所需的分类法值
  // var_dump($topParentPostType);exit;
  //从 分类法名称 取回 post类型名称,这个名称将做为cover/list/view的目录
  $dirName = explode('_', $topParentPostType)[0];
  // var_dump($dirName); exit;
  // 初始化直接父级分类法名称
  $parentPostType=null;

  //3.取得当前`post`对应的直接父级分类法（!!!不一定有）
  $post = get_queried_object(); //取得当前对象
  $_parentPostTypeArr = get_the_terms( $post->ID, $topParentPostType);//取回当前直接父级分类法数组（可能没有）
  // var_dump($topParentPostType, $_parentPostTypeArr);exit;
  if(is_array($_parentPostTypeArr)) $parentPostType=current($_parentPostTypeArr)->slug;

  // 4. 判断模版
  // 4.1 查找子分类法名称专用模版[目录规则]
  if($parentPostType){
    $new_template = locate_template(["{$dirName}/{$parentPostType}.view.php"]);
    if (!empty($new_template)) return $new_template;
  }

  // 4.2 查找分类法名称通用模版[目录规则]
  {
    $new_template = locate_template(["{$dirName}/view.php"]);
    if (!empty($new_template)) return $new_template;
  }


  // 4.3 查找子分类法名称专用模版[文件规则]
  if($parentPostType){
    $new_template = locate_template(["single-{$dirName}-{$parentPostType}.php"]);
    // var_dump("single-{$topParentPostType}-{$parentPostType}.php", $new_template);exit;
    if (!empty($new_template)) return $new_template;
  }

  // 4.4 查找分类法名称通用模版[文件规则]
  {
    $new_template = locate_template(["single-{$dirName}.php"]);
    // var_dump($new_template);exit;
    if (!empty($new_template)) return $new_template;
  }

  // var_dump($dirName, $parentPostType);exit;

  return $template;


  /* 

  // 4.3 当上述规则不存在，则以 single-{分类法名称-子分类法名称}.php 定义视图模版
  // var_dump($topParentPostType, $parentPostType);exit;
  $new_template =  $parentPostType 
    ? "single-{$topParentPostType}-{$parentPostType}"
    : "single-{$topParentPostType}";
  var_dump($new_template);exit;

  $new_template = locate_template(array($new_template.'.php'));

  // 4.4 兜底，默认模版
  return empty($new_template) ? $template : $new_template;


  var_dump(
    $current_post_type,
    // is_category(),
    // the_category(),
    // get_the_category(),

    // get_taxonomies(),//取得所有分类
    get_object_taxonomies($current_post_type),//取得当前post对应的分类法（可能有多个，所以是一个数组）

  );//exit;

  // var_dump(get_the_category());exit; //当前栏目信息（因为模版是栏目的名称）
  // var_dump(get_queried_object());exit; //当前栏目信息

  $post = get_queried_object(); //取得当前对象
  $categories = get_the_terms( $post->ID,  get_object_taxonomies($current_post_type)[0]); //取回当前分类法数组
  var_dump($categories);exit;


  //通过分类别名或ID选择模板文件
  foreach( (array)get_the_category() as $cat) {

    // 优先使用当前 子目录名称 为文章模版名称
    $new_template = locate_template(array('singles/'.$cat->slug.'.php'));
    if (!empty($new_template)) {
        return $new_template;
    }

    // 使用当前子目录ID为文章模版名称(留存，不用)
    // $new_template = locate_template(array('singles/'.'/cat-'.$cat->term_id.'.php'));
    // if (!empty($new_template)) {
    //   return $new_template;
    // }

    // 使用 父级栏目名称 为文章模版名称
    $new_template = locate_template(array('singles/'.strtolower(get_cat_name($cat->category_parent)).'.php')); 
    // var_dump('XXXX: singles/'.strtolower(get_cat_name($cat->category_parent)).'.php'); exit;
    if (!empty($new_template)) {
      return $new_template;
    }

  }

  return $template;
 */
}
//通过 single_template 钩子挂载函数
add_filter('single_template', 'custom_single_template_chy');







// = 移除 wp_head() 内容 =====================

remove_action( 'wp_head', 'wp_generator' );// 1.移除WordPress版本信息

// 2.移除离线编辑器开放接口
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'wlwmanifest_link' );

// 4.移除emoji表情script和style 
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

// 5.移除wp-json链接
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );


// 3.移除WordPress头部加载DNS预获取
// function remove_dns_prefetch( $hints, $relation_type ) {
//   if ( 'dns-prefetch' === $relation_type ) {
//       return array_diff( wp_dependencies_unique_hosts(), $hints );
//   }

//   return $hints;
// }
// add_filter( 'wp_resource_hints', 'remove_dns_prefetch', 10, 2 );


// 6.移除 wp-block-library-css 前端 CSS
// (注意：如果需要wp后台的区块样式，则此块不可开启)
// function fanly_remove_block_library_css() {
//     wp_dequeue_style( 'wp-block-library' );
// }
// add_action( 'wp_enqueue_scripts', 'fanly_remove_block_library_css', 100 );


// 7.移除前后文、第一篇文章、主页meta信息
remove_action('wp_head', 'index_rel_link');//当前文章的索引
remove_action('wp_head', 'parent_post_rel_link', 10, 0);// 父篇
remove_action('wp_head', 'start_post_rel_link', 10, 0);// 开始篇
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//rel=pre
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0); // 上、下篇.


// 8.移除评论
remove_action( 'wp_head', 'feed_links', 2 );//文章和评论feed
remove_action( 'wp_head', 'feed_links_extra', 3 ); // 额外的feed,例如category, tag页

remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );//rel=shortlink
remove_filter('the_content', 'wptexturize');//禁用半角符号自动转换为全角


//9. Remove Global Styles and SVG Filters from WP 5.9.1+ （https://wordpress.org/support/topic/how-to-disable-inline-styling-style-idglobal-styles-inline-css/）
remove_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' );
remove_action( 'wp_body_open', 'wp_global_styles_render_svg_filters' );


//10. Remove style wp-fonts-local （https://wordpress.org/support/topic/6-4-wordpress-loading-hundreds-of-fonts-via-wp-fonts-local-action/）
remove_action( 'wp_head', 'wp_print_font_faces', 50 );


//11. 其它head要移除的信息（不确定是否有用）
// remove_action('wp_head', 'locale_stylesheet' );
// remove_action('wp_head', 'noindex', 1 );

//12. 禁用 REST API、移除 wp-json
add_filter('rest_enabled', '_return_false');
add_filter('rest_jsonp_enabled', '_return_false');
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );